package com.xoa.controller.hr;

import com.xoa.model.hr.*;
import com.xoa.model.hr.learningExperience.LearningExperienceWithBLOBs;
import com.xoa.model.hr.socialRelations.SocialRelationsWithBLOBs;
import com.xoa.model.hr.staffCare.HrStaffCareWithBLOBs;
import com.xoa.model.officesupplies.OfficeTranshistoryWithBLOBs;
import com.xoa.model.trainingPlanRecord.EduTrainingRecordWithBLOBs;
import com.xoa.model.users.Users;
import com.xoa.service.hr.*;
import com.xoa.service.hr.learningExperience.LearningExperienceService;
import com.xoa.service.hr.socialRelations.SocialRelationsService;
import com.xoa.service.hr.staffCare.HrStaffCareService;
import com.xoa.service.officesupplies.OfficeTransHistoryService;
import com.xoa.service.trainingPlanRecord.EduTrainingRecordService;
import com.xoa.service.users.UsersService;
import com.xoa.util.CookiesUtil;
import com.xoa.util.ToJson;
import com.xoa.util.common.session.SessionUtils;
import com.xoa.util.common.wrapper.BaseWrapper;
import com.xoa.util.common.wrapper.BaseWrappers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.text.ParseException;

/**
 * Created by 韩东堂 on 2017/7/12.
 * 数据接口控制类
 */
@RestController
@RequestMapping("/hr/api")
public class HrStaffInfoController {
    @Autowired
    HrSStaffInfoService hrRetireeService;

    @Autowired
    UsersService usersService;

    @Autowired
    OfficeTransHistoryService officeTransHistoryService;

    @Autowired
    private HrStaffContractService hrStaffContractService;
    @Autowired
    private HrStaffIncentiveService hrStaffIncentiveService;
    @Autowired
    private HrphotoService hrphotoService;

    @Autowired
    private LearningExperienceService learningExperienceService;
    @Autowired
    private HrWorkExperienceService hrWorkExperienceService;
    @Autowired
    private SocialRelationsService socialRelationsService;
    @Autowired
    private HrTransferService hrTransferService;
    @Autowired
    private HrStaffReinstatementService hrStaffReinstatementService;
    @Autowired
    private  HrStaffTitleEvaluationService hrStaffTitleEvaluationService;
    @Autowired
    private EduTrainingRecordService eduTrainingRecordService;
    @Autowired
    private HrStaffCareService hrStaffCareService;
    @Autowired
    private HrStaffLeaveService hrStaffLeaveService;

    /**
     * 创建作者：张丽军
     * 方法介绍：根据时间查询退休人员信息
     * @param startTime
     * @param endTime
     * @return
     */
    @RequestMapping("/getRetireeInfo")
    public BaseWrappers getRetireeInfo(String startTime,String endTime){
        return hrRetireeService.selectRetireeInfo(startTime,endTime);
    }

    /**
     * 创建作者：张丽军
     * 方法介绍：根据部门ID查询人员信息列表
     * @param request
     * @param deptId
     * @return
     */

    @ResponseBody
    @RequestMapping("/getPersonFilesByDeptId")
    public ToJson<HrStaffInfo> selectPersonFilesByDeptId(HttpServletRequest request,Integer deptId){

        return hrRetireeService.selectPersonFileByDeptId(request,deptId);
    }

    @ResponseBody
    @RequestMapping("/getHrStaffInfoNews")
    public BaseWrappers getHrStaffInfoNews(){
        return hrRetireeService.getHrStaffInfoNews();
    }
    @ResponseBody
    @RequestMapping("/getHrStaffInfoCount")
    public BaseWrapper getHrStaffInfoCount(String type) throws ParseException {
        return hrRetireeService.getHrStaffInfoCount(type);
    }

    /**
     * 创建作者: 张丽军
     * 方法介绍：根据userId查询人员的详细信息
     * @param request
     * @param uid
     * @return
     */
    @ResponseBody
    @RequestMapping("/getPersonFileByUserId")
    public  HrStaffInfo selectPersonFileByUserId(HttpServletRequest request,Integer uid){
      /*  ToJson<HrStaffInfo> toJson=new ToJson<>(1,"error");
        try{*/
            HrStaffInfo hrStaffInfo=hrRetireeService.selectPersonFileByUserId(request,uid);
       /*     toJson.setObject(hrStaffInfo);
            toJson.setFlag(0);
            toJson.setMsg("ok");
        }catch(Exception e){

        }

        return toJson;*/
       return hrStaffInfo;
    }

    /**
     * 创建作者: 季佳伟
     * 方法介绍：根据userId查询人员的详细信息（用ToJson）
     * @param request
     * @param uid
     * @return
     */
    @ResponseBody
    @RequestMapping("/getPersonByUserId")
    public ToJson<HrStaffInfo> selectPersonByUserId(HttpServletRequest request, Integer uid) {
        return hrRetireeService.selectPersonByUserId(request,uid);
    }
    /**
     * 创建作者:   季佳伟
     * 创建日期:   2017年11月17日 上午11:10:00
     * 方法介绍:   查询登录人的人事档案
     * 参数说明:
     *
     */
    @ResponseBody
    @RequestMapping("/selectOwnStaffInfo")
    public  ToJson<HrStaffInfo> selectOwnStaffInfo(HttpServletRequest request){
        Cookie redisSessionId = CookiesUtil.getCookieByName(request,"redisSessionId");
        Users users = SessionUtils.getSessionInfo(request.getSession(),Users.class,new Users(),redisSessionId);

        return hrRetireeService.selectOwnStaffInfo(request,users);
    }
    /**
     *创建作者: 张丽军
     * 方法介绍：编辑人员信息
     * @param hrStaffInfo
     * @param
     * @return
     * @throws Exception
     */
    @ResponseBody
    @RequestMapping("/editPersonFile")
    public ToJson<HrStaffInfo> updatePersonFile(HrStaffInfo hrStaffInfo,HttpServletRequest request){
        return hrRetireeService.updatePersonFile(hrStaffInfo,request);
    }

    @ResponseBody
    @RequestMapping("/deletPhoteName")
    public ToJson deletPhoteName(HrStaffInfo hrStaffInfo){
        return hrRetireeService.deletPhoteName(hrStaffInfo);
    }


    /**
     * 创建作者: 张丽军
     * 方法介绍：查询人事档案信息（条件查询，全查）
     * @param hrStaffInfo
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping("/selectOnLinePerson")
    public ToJson<HrStaffInfo> selectOnLinePerson(HrStaffInfo hrStaffInfo, HttpServletRequest request, HttpServletResponse response, String export){
        return hrRetireeService.selectOnLinePerson(hrStaffInfo,response,request,export);
    }
    /**
     * 创建作者: 季佳伟
     * 方法介绍：查询人事档案信息（条件查询，离职）
     * @param hrStaffInfo
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping("/selectLeavePerson")
    public ToJson<HrStaffInfo> selectLeavePerson(HrStaffInfo hrStaffInfo, HttpServletRequest request, HttpServletResponse response, String export){
        return hrRetireeService.selectLeavePerson(hrStaffInfo,response,request,export);
    }


    /**
     * 创建作者: 张丽军
     * 方法介绍：新建保存人事档案信息
     * @param hrStaffInfo
     * @param request
     * @return
     * @throws Exception
     */
    @ResponseBody
    @RequestMapping("/savePersonFile")
    public ToJson<Users> savePersonFile(HrStaffInfo hrStaffInfo,HttpServletRequest request){
        return hrRetireeService.savePersonFile(hrStaffInfo,request);
    }


    /**
     * 创建作者:  张丽军
     * 创建日期:   2017年7月24日 下午15:30:00
     * 方法介绍:  根据id删除人事档案信息(包括多个删除)
     * 参数说明:   @param staffId
     * 参数说明:   无
     * @param staffId
     */
    @ResponseBody
    @RequestMapping("/deletePersonById")
    public ToJson<HrStaffInfo> deletePersonById(String staffId){
        return hrRetireeService.deletePersonById(staffId);
    }


    /** 创建作者:高亚峰
     * 方法介绍：人事档案查询详细信息的接口（详情）
     * @param staffId id
     * @return ToJson
     */
    @ResponseBody
    @RequestMapping("/selectStaffInfoById")
    public ToJson<Object> selectStaffInfoById(String staffId){
        return hrRetireeService.selectStaffInfoById(staffId);
    }
    /** 创建作者:高亚峰
     * 方法介绍：人事档案查询详细信息的接口（详情）
     * @param userId id
     * @return ToJson
     */
    @ResponseBody
    @RequestMapping("/selectStaffInfo")
    public ToJson<Object> selectStaffInfo(String userId){
        return hrRetireeService.selectStaffInfo(userId);
    }

    /**
     * 创建作者:   牛江丽
     * 创建日期:   2017年7月25日 下午15:30:00
     * 方法介绍:   查询未建档人人数
     * 参数说明:   @param deptId部门编号
     * 参数说明:   @return
     *
     * @return int人数
     */
    @ResponseBody
    @RequestMapping("/queryCountNoDocument")
    public ToJson<HrStaffInfo> queryCountNoDocument(String deptId){
        return hrRetireeService.queryCountNoDocument(deptId);
    }

    /**
     * 创建作者：张丽军
     * 方法介绍：左侧部门树根据部门id查询人员
     * @param request
     * @param deptId
     * @return
     */
    @ResponseBody
    @RequestMapping("/getUserByDeptId")
    public ToJson<HrStaffInfo> getUserByDeptId(HttpServletRequest request,Integer deptId) {
        return hrRetireeService.getUserByDeptId(deptId);
    }

    /**
     * 创建作者：牛江丽
     * 方法介绍：上传人事档案中的头像,并修改头像
     * @param request
     * @param hrStaffInfo
     * @return
     */
    @ResponseBody
    @RequestMapping("/uploadImage")
    public ToJson<HrStaffInfo> uploadImage(HttpServletRequest request,MultipartFile imageFile,HrStaffInfo hrStaffInfo)throws IllegalStateException, IOException{
        return hrRetireeService.uploadImage(request,imageFile,hrStaffInfo);
    }

    /**
     * @创建作者： 杨超
     * @方法介绍：返回所有职员的工作年限信息
     * @param space 时间间隔
     * @return
     */
    @ResponseBody
    @RequestMapping("/getAllWorkYearsInfo")
    public BaseWrapper getAllWorkYearsInfo(Integer space){
        if(space==null){
            space=1;
        }
        return hrRetireeService.getAllWorkYearsInfo(space);
    }

    /**
     * @创建作者： 杨超
     * @方法介绍：返回所有职员的学历信息
     * @return
     */
    @ResponseBody
    @RequestMapping("/getAllRecordInfo")
    public BaseWrapper getAllInfo(){
        return hrRetireeService.getAllRecordInfo();
    }
    /**
     * 创建作者:   高亚峰
     * 创建日期:   2017年9月18日 上午10:30:00
     * 方法介绍:   导入人事档案
     * 参数说明:   @return
     *
     * @return int人数
     */
    @ResponseBody
    @RequestMapping("/importStaffInfo")
    public ToJson<HrStaffInfo> importStaffInfo(MultipartFile file, HttpServletRequest request, HttpServletResponse response, HttpSession session){
        return hrRetireeService.importStaffInfo(file, request, response, session);
    }


    /** 
    * @Description: 专家信息
    * @Param: [staffId] 
    * @return: com.xoa.util.ToJson<java.lang.Object> 
    * @Author: xiaomeng.Yu
    * @Date: 2018/8/2 
    */ 
    @ResponseBody
    @RequestMapping("/selectStaffInfoByIds")
    public ToJson<Object> selectStaffInfoByIds(String userId){
        return hrRetireeService.selectStaffInfoByIds(userId);
    }

    @ResponseBody
    @RequestMapping("/getExperInformationList")
    public ToJson<Object> getExperInformationList(){
        return hrRetireeService.getExperInformationList();
    }

    /**
     * 创建作者:   李阳
     * 创建日期:   2018.7.26
     * 方法介绍:  在职 查询档案信息  分页
     */
    @RequestMapping("/statusOne")
    @ResponseBody
    public ToJson<HrStaffInfo> statusOne(HttpServletRequest request, HttpServletResponse response,HrStaffInfo hrStaffInfo,String deptIds,Integer page, Integer pageSize, boolean useFlag,String export){
        return hrRetireeService.statusOne(request,response,hrStaffInfo,deptIds,page,pageSize,useFlag,export);
    }
    /**
     * 创建作者:   李阳
     * 创建日期:   2018.7.26
     * 方法介绍:  离职  查询档案信息  分页
     */
    @RequestMapping("/statusTwo")
    @ResponseBody
    public ToJson<HrStaffInfo> statusTwo(HttpServletRequest request, HttpServletResponse response,HrStaffInfo hrStaffInfo,String deptIds,Integer page, Integer pageSize, boolean useFlag,String export){
        return hrRetireeService.statusTwo(request,response,hrStaffInfo,deptIds,page,pageSize,useFlag,export);
    }

    /**
     * 创建作者:   李阳
     * 创建日期:   2018.8.2
     * 方法介绍: 根据部门 deptId 找人 离职
     */
    @RequestMapping("/getByDeptIdStatusTwo")
    @ResponseBody
    public ToJson<HrStaffInfo> getByDeptIdStatusTwo(String deptId){
        return hrRetireeService.getByDeptIdStatusTwo(deptId);
    }


    /**
     * 创建作者:   李阳
     * 创建日期:   2018.7.27
     * 方法介绍:   根据 staffId 查询档案信息
     */
    @RequestMapping("/getByStaffId")
    @ResponseBody
    public ToJson<HrStaffInfo> getByStaffId(Integer staffId,String userId){
        return hrRetireeService.getByStaffId(staffId,userId);
    }

    /**
     * 创建作者:   李阳
     * 创建日期:   2018.7.30
     * 方法介绍:   删除全部档案信息
     */
    @RequestMapping("/delAll")
    @ResponseBody
    public ToJson<HrStaffInfo> delAll(String workStatus){
        return  hrRetireeService.delAll(workStatus);
    }
    /**
     * 创建作者:   李阳
     * 创建日期:   2018.7.30
     * 方法介绍:   删除全部废弃档案信息
     */
    @RequestMapping("/delLose")
    @ResponseBody
    public ToJson<HrStaffInfo> delLose(String workStatus){
        return  hrRetireeService.selectLose(workStatus);
    }
    /**
     * 创建作者:   李阳
     * 创建日期:   2018.7.31
     * 方法介绍:   查询领用物品
     */
    @RequestMapping("/getTranshistoryById")
    @ResponseBody
    public ToJson<OfficeTranshistoryWithBLOBs> getTranshistoryById(String borrower){
        return officeTransHistoryService.getTranshistoryById(borrower);
    }
    /**
     * 创建作者:   李阳
     * 创建日期:   2018.8.3
     * 方法介绍:   查询合同
     */
    @RequestMapping("/getContract")
    @ResponseBody
    public  ToJson<HrStaffContract> getContract(String staffName, Integer page, Integer pageSize, boolean useFlag){
        return hrStaffContractService.getContract(staffName,page,pageSize,useFlag);
    }
    /**
     * 创建作者:   李阳
     * 创建日期:   2018.8.3
     * 方法介绍:   查询奖惩
     */
    @RequestMapping("/getIncentive")
    @ResponseBody
    public ToJson<HrStaffIncentiveWithBLOBs> getByStaffNameIncentive(String staffName, Integer page, Integer pageSize, boolean useFlag){
        return hrStaffIncentiveService.getByStaffNameIncentive(staffName,page,pageSize,useFlag);
    }
    /**
     * 创建作者:   李阳
     * 创建日期:   2018.8.6
     * 方法介绍:   查询证件照
     */
    @RequestMapping("/getPhoto")
    @ResponseBody
    public ToJson<HrphotoWithBLOBs> getByStaffNamePhoto(String staffName, Integer page, Integer pageSize, boolean useFlag){
        return hrphotoService.getByStaffName(staffName,page,pageSize,useFlag);
    }
    /**
     * 创建作者:   李阳
     * 创建日期:   2018.8.6
     * 方法介绍:   查询学习经历
     */
    @RequestMapping("/getLearning")
    @ResponseBody
    public ToJson<LearningExperienceWithBLOBs> getByStaffNameLearning(String staffName, Integer page, Integer pageSize, boolean useFlag){
        return learningExperienceService.getByStaffName(staffName,page,pageSize,useFlag);
    }
    /**
     * 创建作者:   李阳
     * 创建日期:   2018.8.6
     * 方法介绍:   查询工作经历
     */
    @RequestMapping("/getWork")
    @ResponseBody
    public ToJson<HrWorkExperienceWithBLOBs> getByNameWork(String staffName, Integer page, Integer pageSize, boolean useFlag){
        return hrWorkExperienceService.getByStaffName(staffName,page,pageSize,useFlag);
    }
    /**
     * 创建作者:   李阳
     * 创建日期:   2018.8.6
     * 方法介绍:   查询社会关系
     */
    @RequestMapping("/getSocia")
    @ResponseBody
    public ToJson<SocialRelationsWithBLOBs> getByStaffNameSocia(String staffName, Integer page, Integer pageSize, boolean useFlag){
               return socialRelationsService.getByStaffName(staffName,page,pageSize,useFlag);
    }
    /**
     * 创建作者:   李阳
     * 创建日期:   2018.8.6
     * 方法介绍:   查询人事调动
     */
    @RequestMapping("/getTrans")
    @ResponseBody
    public ToJson<HrTransferWithBLOBs> getByStaffNameTrans(String staffName, Integer page, Integer pageSize, boolean useFlag){
        return hrTransferService.getByStaffName(staffName,page,pageSize,useFlag);
    }
    /**
     * 创建作者:   李阳
     * 创建日期:   2018.8.6
     * 方法介绍:   查询复职
     */
    @RequestMapping("/getReins")
    @ResponseBody
    public ToJson<HrStaffReinstatementWithBLOBs> getByStaffNameReins(String staffName, Integer page, Integer pageSize, boolean useFlag){
        return hrStaffReinstatementService.getBystaffName(staffName,page,pageSize,useFlag);
    }
    /**
     * 创建作者:   李阳
     * 创建日期:   2018.8.6
     * 方法介绍:   查询职称评定
     */
    @RequestMapping("/getEval")
    @ResponseBody
    public ToJson<HrStaffTitleEvaluation> getByStaffNameEval(String staffName, Integer page, Integer pageSize, boolean useFlag){
        return hrStaffTitleEvaluationService.getByStaffName(staffName,page,pageSize,useFlag);
    }
    /**
     * 创建作者:   李阳
     * 创建日期:   2018.8.6
     * 方法介绍:   查询培训
     */
    @RequestMapping("/getRecord")
    @ResponseBody
    public  ToJson<EduTrainingRecordWithBLOBs> getByStaffNameRecord(String staffName, Integer page, Integer pageSize, boolean useFlag){
        return eduTrainingRecordService.getByStaffName(staffName,page,pageSize,useFlag);
    }
    /**
     * 创建作者:   李阳
     * 创建日期:   2018.8.6
     * 方法介绍:   查询员工关怀
     */
    @RequestMapping("/getCare")
    @ResponseBody
    public ToJson<HrStaffCareWithBLOBs> getByStaffNameCare(String staffName, Integer page, Integer pageSize, boolean useFlag){
        return hrStaffCareService.getByStaffName(staffName,page,pageSize,useFlag);
    }
    /**
     * 创建作者:   李阳
     * 创建日期:   2018.8.6
     * 方法介绍:   查询离职
     */
    @RequestMapping("/getLeave")
    @ResponseBody
    public ToJson<HrStaffLeave> getByStaffNameLeave(String staffName, Integer page, Integer pageSize, boolean useFlag){
        return hrStaffLeaveService.getByStaffName(staffName,page,pageSize,useFlag);
    }
    /**
     * 创建作者:   李阳
     * 创建日期:   2018.8.6
     * 方法介绍:   查询未记录部门
     */
    @RequestMapping("/getNoDept")
    @ResponseBody
    public ToJson<HrStaffInfo>getNoDept(){
        return hrRetireeService.getNoDept();
    }



    /**
     * 用户头像上传
     * @param request
     * @param file
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/upload",method={RequestMethod.POST},produces = {"application/json;charset=UTF-8"})
    public BaseWrapper uploadImg(HttpServletRequest request, MultipartFile file){
        return hrRetireeService.uploadImg(request,file);
    }



}
